package com.pvdnc.xdynamic.loader.file;

import java.io.File;
import java.math.BigInteger;
import java.security.MessageDigest;

public class MD5 {
    public static byte[] getRawMD5(File file) throws Exception {
        //拿到一个MD5转换器,如果想使用SHA-1或SHA-256，则传入SHA-1,SHA-256
        final MessageDigest md = MessageDigest.getInstance("MD5");
        //分多次将一个文件读入，对于大型文件而言，比较推荐这种方式，占用内存比较少。
        FileUtils.read(file, new FileUtils.BlockCallback() {
            @Override
            public void onBlockReceived(byte[] blockData, int length) {
                md.update(blockData, 0, length);
            }
        });
        //转换并返回包含16个元素字节数组,返回数值范围为-128到127
        return md.digest();
    }
    public static String getMD5(File file) {
        try {
            byte[] md5Bytes=getRawMD5(file);
            BigInteger bigInt = new BigInteger(1, md5Bytes);//1代表绝对值
            return bigInt.toString(16);//转换为16进制
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
